#ifndef Character_H
#define Character_H

class Character {
protected:
    std::string name, _class;
    int level, HP, bonusHP, damage, cooldown[4];
    bool stunned;

public:
    std::string &get_name(), &get_class();
    int &get_HP(), get_damage();
    bool &isStunned();
    void use_skill(std::string skill_name, Character &target);
    void decrease_cds();
    void take_damage(int num);
};

class Player: public Character {
private:
    int strength, willpower, agility, maxHP, XP;
    std::string next_quest;
public:
    int &get_str(), &get_will(), &get_agi(), &get_maxHP();
    std::string &get_next();
    void regen(), add_xp(int amount), take_damage(int num);
    void save();
    bool load(std::string charname);
    void show_sheet(), show_skills(), show_cooldowns();
    void use_skill(std::string skill_name, Character &target);
    bool check_availability(int num);
    void reset();
    Player();
};

class NPC: public Character {
public:
    NPC(std::string n, std::string c, int l);
};

#endif // Character_H
